
package br.com.clicarros.controle.veiculo;

import br.com.clicarros.dominio.veiculo.Categoria;
import br.com.clicarros.dominio.veiculo.Marca;
import br.com.clicarros.dominio.veiculo.Veiculo;
import br.com.clicarros.fachada.IFachada;
import br.com.clicarros.fachada.implementacao.Fachada;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Luana
 */
@WebServlet(name = "ControleVeiculo", urlPatterns = {"/ControleVeiculo"})
public class ControleVeiculo extends HttpServlet {

 IFachada fachada = new Fachada();

  
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
       if(request.getParameter("listarVeiculos") != null){
         
           Marca marca = new Marca();
           marca.setIdMarca(Integer.parseInt(request.getParameter("idmarca")));
           
            marca = (Marca) fachada.consultarId(marca);
           
         response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        StringBuilder combo = new StringBuilder("<select name='modelo' id='modelo'>");
        for(Veiculo veiculo : marca.getVeiculos()){
            combo.append("<option value='");
            combo.append(veiculo.getIdVeiculo());
            combo.append("'>");
            combo.append(veiculo.getModelo()).append(" - ").append(veiculo.getVersao());
            combo.append("</option>");
        }
        combo.append("</select>");
        out.print(combo.toString());
        
        }else
        if(request.getParameter("listar") != null){
           
            request.setAttribute("marcas", fachada.listarTodos(new Marca()));
            request.setAttribute("categorias", fachada.listarTodos(new Categoria()));
            request.setAttribute("veiculos", fachada.listarTodos(new Veiculo()));
            
            redireciona(request, response, null);

        
        }// end if listar
                
        else if(request.getParameter("cadastrar") != null){
        
        
        Veiculo v = new Veiculo();
        
 
        v.setModelo(request.getParameter("modelo"));
        v.setVersao(request.getParameter("versao"));
        v.setMotor(request.getParameter("motor"));

        Marca m = new Marca();
        
        m.setIdMarca(Integer.parseInt(request.getParameter("marca")));
        
        Categoria c = new Categoria();
        
        c.setIdCategoria(Integer.parseInt(request.getParameter("categoria")));
        
        v.setMarca(m);
        v.setCategoria(c);
        
        fachada.inserir(v);
          
        
          request.setAttribute("marcas", fachada.listarTodos(new Marca()));
          request.setAttribute("categorias", fachada.listarTodos(new Categoria()));          
          request.setAttribute("veiculos", fachada.listarTodos(new Veiculo()));
          
          redireciona(request, response, "Veículo Cadastrado");
        
         
            
    } // end if cadastrar
        else if(request.getParameter("excluir") != null){
     
     
                  
                String[] ids = request.getParameterValues("id");
           
                for(String id : ids){
              
                    Veiculo v = new Veiculo();
           
                    v.setIdVeiculo(Integer.parseInt(id));
                    fachada.excluir(v);
                }
                
          
                request.setAttribute("marcas", fachada.listarTodos(new Marca()));
                request.setAttribute("categorias", fachada.listarTodos(new Categoria()));
                request.setAttribute("veiculos", fachada.listarTodos(new Veiculo()));
                
                redireciona(request, response, "Veiculo(s) Deletado(s)");
           
    }// end if excluir
        else if(request.getParameter("editar") != null){

            Veiculo v = new Veiculo();
            v.setIdVeiculo(Integer.parseInt(request.getParameter("editar")));
            
            
            request.setAttribute("veiculo", fachada.consultarId(v));
            request.setAttribute("marcas", fachada.listarTodos(new Marca()));
            request.setAttribute("categorias", fachada.listarTodos(new Categoria()));
            request.setAttribute("listaMotor", Veiculo.getListaMotor());
            request.getRequestDispatcher("Administrador/veiculo/AlterarVeiculo.jsp").forward(request, response);
            
         
          
        }  
        else if(request.getParameter("alterar") != null){
  
       Veiculo v = new Veiculo();
            
       v.setIdVeiculo(Integer.parseInt(request.getParameter("id")));
       v.setModelo(request.getParameter("modelo"));
       v.setVersao(request.getParameter("versao"));
       v.setMotor(request.getParameter("motor"));
       
       Marca m = new Marca();
        
        m.setIdMarca(Integer.parseInt(request.getParameter("marca")));
        
        Categoria c = new Categoria();
        
        c.setIdCategoria(Integer.parseInt(request.getParameter("categoria")));
        
        v.setMarca(m);
        v.setCategoria(c);     
        
            
            fachada.alterar(v);
            
        request.setAttribute("marcas", fachada.listarTodos(new Marca()));
        request.setAttribute("categorias", fachada.listarTodos(new Categoria()));          
        request.setAttribute("veiculos", fachada.listarTodos(new Veiculo()));
        
        redireciona(request, response, "veiculos alterados");
        
        }// end if alterar
    
        else if(request.getParameter("filtrar") != null){
            
            
                          
            Veiculo v = new Veiculo();
            
            v.setModelo(request.getParameter("modelo"));
            v.setVersao(request.getParameter("versao"));
            
            Marca m = new Marca();
            
            m.setMarca(request.getParameter("marca"));
            
            Categoria c = new Categoria();
            
            c.setCategoria(request.getParameter("categoria"));
            
            v.setMarca(m);
            v.setCategoria(c);
            
                        
            //Criando um atributo chamado cliente e atribuindo a ele o valor do retorno dao.listar.
            request.setAttribute("marcas", fachada.listarTodos(new Marca()));
            request.setAttribute("categorias", fachada.listarTodos(new Categoria()));
            request.setAttribute("veiculos", fachada.consultar(v));
            //Pegando a requisiçaoe enviando para a página JSP exibir.
            redireciona(request, response, null);
            
            
      }else if(request.getParameter("cadastroveiculo") != null){

          
            request.setAttribute("marcas", fachada.listarTodos(new Marca()));
            request.setAttribute("categorias", fachada.listarTodos(new Categoria()));
            request.setAttribute("listaMotor", Veiculo.getListaMotor());
            request.getRequestDispatcher("Administrador/veiculo/CadastroVeiculo.jsp").forward(request,response);
          
      }
   }
    
   private void redireciona(HttpServletRequest request,HttpServletResponse response, String mensagem) throws ServletException, IOException{
        
        if(mensagem != null){
            request.setAttribute("mensagem", "<div id=mensagem>"+mensagem+"</div>");
        }
        
        request.getRequestDispatcher("Administrador/veiculo/veiculos.jsp").forward(request,response);
        
    }
    
}
